package com.example.game_app.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import com.example.game_app.R;

import java.util.List;
import java.util.Map;

public class MatchListAdapter extends ArrayAdapter<Map<String, String>> {
    private Context context;
    private List<Map<String, String>> matchList;
    private OnItemClickListener itemClickListener;

    public MatchListAdapter(Context context, List<Map<String, String>> matchList, OnItemClickListener itemClickListener) {
        super(context, R.layout.game_match_view, matchList);
        this.context = context;
        this.matchList = matchList;
        this.itemClickListener = itemClickListener;
    }

    /**
     * 在ListView中显示每个项目的视图。这个方法负责将数据集中的每个项目绑定到相应的视图上。
     *
     * @param position    当前项的位置
     * @param convertView 可复用的视图对象，如果为null，则需要创建一个新的视图
     * @param parent      视图的父容器
     * @return 绑定数据后的视图对象
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;

        // 检查convertView是否为空，如果为空，则需要初始化视图和ViewHolder对象
        if (convertView == null) {
            // 使用LayoutInflater从XML布局文件中创建一个新的视图
            convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.game_match_item, parent, false);
            viewHolder = new ViewHolder();
            // 初始化ViewHolder中的各个视图组件
            viewHolder.playerA = convertView.findViewById(R.id.playerA);
            viewHolder.playerB = convertView.findViewById(R.id.playerB);
            viewHolder.matchTime = convertView.findViewById(R.id.matchTime);
            // 不进行数据映射，比赛描述
            // viewHolder.matchDescription = convertView.findViewById(R.id.matchDescription);
            viewHolder.score = convertView.findViewById(R.id.score);
            // 将position作为Tag绑定到convertView上，以便后续点击事件中使用
            convertView.setTag(viewHolder);
        } else {
            // 如果convertView不为空，则直接从convertView中获取ViewHolder对象
            // viewHolder = (ViewHolder) convertView.getTag();
            viewHolder = (ViewHolder) convertView.getTag();
        }

        // 从数据集中获取当前项的数据
        Map<String, String> match = getItem(position); // 确保getItem方法返回正确的数据项
        if (match != null) {
            // 使用获取到的数据填充视图组件
            viewHolder.playerA.setText(match.get("playerA"));
            viewHolder.playerB.setText(match.get("playerB"));
            viewHolder.matchTime.setText(match.get("matchTime"));
            // viewHolder.matchDescription.setText(match.get("matchDescription"));
            viewHolder.score.setText(match.get("score"));
        }

        // 为每个比赛列表元素添加自定义点击事件
        convertView.setTag(R.id.matchLists, position);
        convertView.setOnClickListener(v -> {
            // 从视图中正确获取绑定的position，使用之前设置的key
            int position1 = (Integer) v.getTag(R.id.matchLists);
            // 确保getItem方法返回正确的数据项
            Map<String, String> match1 = getItem(position1);
            if (itemClickListener != null) {
                itemClickListener.onItemClick(match1);
            }
        });

        // 返回填充完数据的视图
        return convertView;
    }

    static class ViewHolder {
        TextView playerA;
        TextView playerB;
        TextView matchTime;
        TextView matchDescription;
        TextView score;
    }

    public interface OnItemClickListener {
        void onItemClick(Map<String, String> map);
    }
}
